/**
 * base64编码
 * @param {*} str 
 * @returns 
 */
function base64Encode(str) {
  let encodedStr = btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function (match, p1) {
      return String.fromCharCode('0x' + p1);
  }));
  return encodedStr;
}

/**
 * base64解码
 * @param {*} str 
 * @returns 
 */
function base64Decode(str) {
  return decodeURIComponent(atob(str).split("").map(function (c) { return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); }).join(""));
}

/**
 * 时间格式化 2023-12-03 00:00:00
 * @param {*} date 
 * @returns 
 */
function formatDate(date) {
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  const hours = date.getHours().toString().padStart(2, '0');
  const minutes = date.getMinutes().toString().padStart(2, '0');
  const seconds = date.getSeconds().toString().padStart(2, '0');
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}